
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType

f = open(".\\动态柱状图数据\\1960-2019全球GDP数据.csv", "r", encoding="GB2312")
data_lines = f.readlines()
f.close()

data_lines.pop(0) # 删除第一条数据

data_dict = {} # 字典对象
for line in data_lines:
    year = int(line.split(",")[0]) # split 将一个字符串分割成子字符串
    country = line.split(",")[1]
    gdp = float(line.split(",")[2]) # gdp 数据，注意有科学计数法的数据
    if data_dict.get(year) is not None:    # 已经有了某个年份关键字    他返回不是True False
        data_dict[year].append([country, gdp])
    else: # 还没有该年份关键字
        data_dict[year] = []    # 新的关键字，数据为空的列表 字典新增元素就是：字典名[key]=value
        data_dict[year].append([country, gdp])



year_list = sorted(data_dict.keys()) # 得到字典中全部年份的排序
# 构建时间线对象
timeline = Timeline(
    {"theme": ThemeType.LIGHT}
)
for year in year_list:
    data_dict[year].sort(key= lambda element: element[1], reverse= True)# 按GDP排序
    year_data = data_dict[year][0: 8] # 切片，取前8
    x_data = []
    y_data = []
    for country_gdp in year_data:
        x_data.append(country_gdp[0]) # 国家
        y_data.append(country_gdp[1] / 100000000) # GDP

    bar = Bar()
    x_data.reverse()
    y_data.reverse()
    bar.add_xaxis(x_data)
    bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))
    bar.reversal_axis() # 反转显示x y
    bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}年全球前8 GDP数据")
    )
    timeline.add(bar, str(year))


# 设置
timeline.add_schema(
    is_auto_play= True, # 自动播放
    play_interval=1000, # 自动播放时间间隔，单位ms
    is_timeline_show= True,
    is_loop_play= False
)

timeline.render("1960-2019全球GDP前8国家.html")